﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace PlanB.Core.Logging
{
    /// <summary>
    /// Implements a MockLogger, for the situations when we don't want to use any logging
    /// </summary>
    public class MockLogger : ILogger
    {

        /// <summary>
        /// Initializes Logger implementation
        /// </summary>
        /// <param name="loggingConfiguration"></param>
        public void InitializeLogger(LoggingConfiguration loggingConfiguration)
        {
        }

        /// <summary>
        /// Logs an exception to the application
        /// </summary>
        /// <param name="area">Area to which we log the the exception. Area denotes the main log division, like application name</param>
        /// <param name="category">Category to which we log the the exception. Category denotes the log subdivision, like application module name</param>
        /// <param name="severity">The Trace level for this message.</param>
        /// <param name="exception">Exception to log</param>
        /// <param name="eventId">The event id to identifiy a specific event..</param>
        /// <param name="message">Event message we want to trace. The message can contains format placeholders, which are then filled with the parameters.</param>
        /// <param name="eventParameters">State any additional parameters to be logged together with the event</param>
        public void LogException(string area, string category, EventServerity severity, Exception exception, int eventId, string message, params object[] eventParameters)
        {
            
        }

        /// <summary>
        /// Logs an exception to the application
        /// </summary>
        /// <param name="area">Area to which we log the the exception. Area denotes the main log division, like application name</param>
        /// <param name="category">Category to which we log the the exception. Category denotes the log subdivision, like application module name</param>
        /// <param name="severity">The Trace level for this message.</param>
        /// <param name="eventId">The event id to identifiy a specific event..</param>
        /// <param name="message">Event message we want to trace. The message can contains format placeholders, which are then filled with the parameters.</param>
        /// <param name="eventParameters">State any additional parameters to be logged together with the event</param>
        public void LogMessage(string area, string category, EventServerity severity, int eventId, string message, params object[] eventParameters)
        {
        }

        /// <summary>
        /// Creates a separate diagnostics area, if it does not already exist, in the logging systems where logs are shared among multiple systems and applications (like ULS). 
        /// Area determines the main log division, e.g. Application name.
        /// </summary>
        /// <param name="areaName">Name of the area being created</param>
        /// <remarks>In the logging systems where the logs are exclusive (not shared between applications), this method does not make any difference.</remarks>
        public void EnsureArea(string areaName)
        {
            
        }

        /// <summary>
        /// Creates a separate diagnostics category, if it does not already exist, under a parent area, in the logging systems where logs are shared among multiple systems and applications (like ULS). 
        /// Category determines the log subdivision, e.g. Application module.
        /// </summary>
        /// <param name="categoryName">Name of the category being created</param>
        /// <param name="parentAreaName">Name of the parent area, to which category belong</param>
        /// <remarks>In the logging systems where the logs are exclusive (not shared between applications), this method does not make any difference.</remarks>
        public void EnsureCategory(string categoryName, string parentAreaName)
        {
            
        }

        /// <summary>
        /// Deletes diagnostics category, with all belonging category events, from a logging system where the log is shared between multiple applications
        /// </summary>
        /// <param name="categoryName">Name of the category being deleted</param>
        /// <param name="parentAreaName">Name of the are the category belongs to</param>
        /// <remarks>In the logging systems where the logs are exclusive (not shared between applications), this method does not make any difference.</remarks>
        public void DeleteCategory(string categoryName, string parentAreaName)
        {
            
        }

        /// <summary>
        /// Deletes the diagnostics area, with all belonging area categories and events, from a logging system where the log is shared between multiple applications
        /// </summary>
        /// <param name="areaName">Name of the are area being deleted</param>
        /// <remarks>In the logging systems where the logs are exclusive (not shared between applications), this method does not make any difference.</remarks>
        public void DeleteArea(string areaName)
        {
            
        }

        /// <summary>
        /// Sets the default logging area and category
        /// </summary>
        /// <param name="area">Default area</param>
        /// <param name="category">Default category</param>
        public void SetDefaultArea(string area, string category)
        {
            
        }
        
    }
}
